package com.turing.post.capitalaccounts.util;

import java.math.BigInteger;
import java.util.Date;
import java.util.List;

import javax.ejb.Local;
import javax.ejb.Remote;

import com.turing.post.util.PCPSApplicationException;
import com.turing.post.util.PCPSWebInput;

/**
 * 销售机构资金明细数据访问接口
 * 
 * @author 李治
 * 
 */
@Remote
@Local
public interface SaleCapitalDetailDao {

	/**
	 * 插入销售机构资金明细
	 * 
	 * @throws PCPSApplicationException
	 */
	public void insertSaleCapitalDetail(SaleCapitalDetail obj)
			throws PCPSApplicationException;

	/**
	 * 根据相关业务单ID查询销售机构资金明细列表
	 * 
	 * @param ticketId
	 * @param tranType
	 * @return
	 */
	public List<SaleCapitalDetail> getAllSaleCapitalDetailListByTicketId(
			BigInteger ticketId, String tranType);

	/**
	 * 查询销售机构资金明细列表
	 * 
	 * @param webInput
	 *            业务处理webservice输入值
	 * @param page
	 *            页数
	 * @param startTranDate
	 *            开始时间
	 * @param endTranDate
	 *            结束时间
	 * @param ticketId
	 *            相关业务单ID
	 * @param saleBranchNo
	 *            销售机构号
	 * @param tranType
	 *            交易类型
	 * @return 明细列表
	 */
	public List<SaleCapitalDetail> getSaleCapitalDetailList(
			PCPSWebInput webInput, Integer page, Date startTranDate,
			Date endTranDate, BigInteger startAmount, BigInteger endAmount,
			BigInteger ticketId, String saleBranchNo, String tranType);

	/**
	 * 查询销售机构资金明细总数
	 * 
	 * @param webInput
	 *            业务处理webservice输入值
	 * @param startTranDate
	 *            开始日期
	 * @param endTranDate
	 *            结束日期
	 * @param ticketId
	 *            相关业务单ID
	 * @param saleBranchNo
	 *            销售机构号
	 * @param tranType
	 *            交易类型
	 * @return 销售机构资金明细总数
	 */
	public BigInteger getSaleCapitalDetailCount(PCPSWebInput webInput,
			Date startTranDate, Date endTranDate, BigInteger startAmount,
			BigInteger endAmount, BigInteger ticketId, String saleBranchNo,
			String tranType);

	/**
	 * 销售机构现金明细列表
	 * 
	 * @param webInput
	 *            业务处理webservice输入值
	 * @param page
	 *            页数
	 * @param startTranDate
	 *            开始日期
	 * @param endTranDate
	 *            结束日期
	 * @param startAmount
	 *            起始资金
	 * @param endAmount
	 *            终止资金
	 * @param ticketId
	 *            相关业务单ID
	 * @param saleBranchNo
	 *            销售机构号
	 * @param tranType
	 *            交易类型
	 * @return 销售机构资金明细列表
	 */
	public List<SaleCapitalDetail> getCashSaleCapitalDetailList(
			PCPSWebInput webInput, Integer page, Date startTranDate,
			Date endTranDate, BigInteger startAmount, BigInteger endAmount,
			BigInteger ticketId, String saleBranchNo, String tranType);

	/**
	 * 销售机构现金明细总数
	 * 
	 * @param webInput
	 *            业务处理webservice输入值
	 * @param startTranDate
	 *            开始日期
	 * @param endTranDate
	 *            结束日期
	 * @param startAmount
	 *            其实资金
	 * @param endAmount
	 *            终止资金
	 * @param ticketId
	 *            相关业务单ID
	 * @param saleBranchNo
	 *            销售机构号
	 * @param tranType
	 *            交易类型
	 * @return 记录总数
	 */
	public BigInteger getCashSaleCapitalDetailCount(PCPSWebInput webInput,
			Date startTranDate, Date endTranDate, BigInteger startAmount,
			BigInteger endAmount, BigInteger ticketId, String saleBranchNo,
			String tranType);

	/**
	 * 按销售机构号分类汇总某日某销售商下属销售机构资金明细
	 * 
	 * @param issueCompanyNo
	 *            发卡商NO
	 * @param tranDate
	 *            帐务日期
	 * @return
	 */
	public List<Object[]> sumAllSaleCapitalDaySettlementByBranch(
			String issueCompanyNo, Date tranDate);

	/**
	 * 汇总指定机构现金上缴业务
	 * 
	 * @param saleBranchNo
	 * @param tranDate
	 * @return
	 */
	public List<Object[]> getBranchDaySettByBranchAndTranDate(
			String saleBranchNo, Date tranDate);
}
